import { TableProps } from 'element-plus';
import { BasicColumn } from './column';
import { BasicPaginationProps } from './pagination';
import { Fn, Recordable } from './util';

export interface FetchSetting {
  // 请求接口当前页数
  pageField: string;
  // 每页显示多少条
  sizeField: string;
  // 请求结果列表字段  支持 a.b.c
  listField: string;
  // 请求结果总数字段  支持 a.b.c
  totalField: string;
}

export type DefaultRow = any;

export interface BasicTableProps<T = DefaultRow> extends TableProps<T> {
  /**
   * 表格数据
   */
  data: T[];
  /**
   * 表格列配置
   */
  columns: BasicColumn<T>[];
  /**
   * 分页
   */
  pagination?: boolean | BasicPaginationProps;
  /**
   * 接口请求对象
   */
  api?: (...arg: any) => Promise<any>;
  // 请求之前处理参数
  beforeFetch?: Fn;
  // 自定义处理接口返回参数
  afterFetch?: Fn;
  // 查询条件请求之前处理
  handleSearchInfoFn?: Fn;
  // 请求接口配置
  fetchSetting?: Partial<FetchSetting>;
  // 立即请求接口
  immediate?: boolean;
  // 在开起搜索表单的时候，如果没有数据是否显示表格
  emptyDataIsShowTable?: boolean;
  // 额外的请求参数
  searchInfo?: Recordable;
  // 搜索表单
  searchFromItems?: any[];
  // 是否自动生成key
  autoCreateKey?: boolean;
  // 是否隐藏表头
  hideTableHeader?: boolean;
}

export interface TableActionType {
  reload: (opt?: FetchParams) => Promise<any>;
  getData: <T = Recordable>() => T[];
  [key: string]: (...args: any[]) => any;
}

export interface FetchParams {
  searchInfo?: Recordable;
  page?: number;
  sortInfo?: Recordable;
  filterInfo?: Recordable;
}
